/**
 * 删除有序数组中的重复项 II
 * https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii
 */

/**
 * 双指针
 * 相等的元素在数组中的下标一定是连续的
 * nums长度为0，则不包含任何元素，返回0
 * nums长度为1，则包含1个元素，返回1
 * nums长度为2，包含2个元素，返回2，不用处理
 * 从下标2开始删除重复元素
 * 定义两个指针，快指针fast，慢指针slow
 * 快指针表示遍历数组到达的下标位置，慢指针表示下一个不同元素要填入的下标位置
 * 初始值两个指针都指向第三个元素，即下标为2的元素
 * 时间复杂度：O(n)
 * 空间复杂度：O(1)
 */
const removeDuplicates = function(nums) {
    const len = nums.length;
    if (len <= 2) return len;
    let slow = 2, fast = 2; // 快慢指针都初始化为2，即下标为2的元素
    while (fast < len) {
        if (nums[slow - 2] !== nums[fast]) {
            nums[slow] = nums[fast];
            slow++; // slow指针指向下一个将要赋值的位置
        }
        fast++;
    }
    return slow; // 返回slow的值，就是数组中不重复的元素的个数
}